/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package isd.inventario.modelo;

import isd.general.modelo.GR_Auditoria;
import isd.general.modelo.GR_Moneda;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;


/**
 *
 * @author Claudio
 */
@Entity
@Table(name = "stmpdh")
@IdClass(ST_ProductoPK.class)
public class ST_Producto implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "STMPDH_ARTCOD", nullable = false, length = 30)
    private String artcod;

    @Id
    @Column(name = "STMPDH_TIPPRO", nullable=false,length = 30)
    private String tippro;

    @JoinColumn(name = "STMPDH_TIPPRO", referencedColumnName = "STTTPH_TIPPRO", nullable = false, insertable=false, updatable=false)
    @ManyToOne(optional=false,fetch=FetchType.LAZY)
    private ST_TipoProducto tipoProducto;

    @Column(name = "STMPDH_DESCRP", nullable = false, length = 120)
    private String descrp;

    @Column(name = "STMPDH_PESCTR")
    private Character pesctr;

    @Column(name = "STMPDH_PESFAC", precision = 15, scale = 7)
    private BigDecimal pesfac;
    
    //Peso maximo
    @Column(name = "STMPDH_PESMAX", precision = 15, scale = 7)
    private BigDecimal pesmax;

    //Peso minimo
    @Column(name = "STMPDH_PESMIN", precision = 15, scale = 7)
    private BigDecimal pesmin;
    @Lob
    @Column(name = "STMPDH_TEXTOS", length = 2147483647)
    private String textos;
    
    //Unidad de medida
    @JoinColumn(name = "STMPDH_UNIMED", referencedColumnName = "STTUNI_UNIDAD", nullable = false, insertable=false, updatable=false)
    @ManyToOne(fetch=FetchType.LAZY)
    private ST_UnidadMedida unidadMedida;

    @JoinColumn(name = "STMPDH_UNICON", referencedColumnName = "STTUNI_UNIDAD", nullable = false, insertable=false, updatable=false)
    @ManyToOne(fetch=FetchType.LAZY)
    private ST_UnidadMedida unidadConversion;

    //Unidad de medida secundaria
//    @JoinColumn(name = "STMPDH_UNISEC", referencedColumnName = "STTUNI_UNIDAD", nullable = false, insertable=false, updatable=false)
//    @ManyToOne
//    private UnidadDeMedida unidadSecundaria;

    //Unidad de medida alternativa
//    @JoinColumn(name = "STMPDH_UNIALT", referencedColumnName = "STTUNI_UNIDAD", nullable = false, insertable=false, updatable=false)
//    @ManyToOne
//    private UnidadDeMedida unidadAlternativa;

    //Unidad de peso

    @JoinColumn(name = "STMPDH_UNIPES", referencedColumnName = "STTUNI_UNIDAD", nullable = false, insertable=false, updatable=false)
    @ManyToOne(fetch=FetchType.LAZY)
    private ST_UnidadMedida unidadPeso;

    //Stock minimo
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_STKMIN", precision = 18, scale = 4)
    private BigDecimal stkmin;

    //Stock maximo
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_STKMAX", precision = 18, scale = 4)
    private BigDecimal stkmax;

    //Punto de pedido
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_PTOPED", precision = 18, scale = 4)
    private BigDecimal ptoped;

    //Precio de venta
    @Column(name = "STMPDH_PREVTA", precision = 10, scale = 2)
    private BigDecimal precioVenta;

    //Precio de referencia
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_PREREF", precision = 20, scale = 6)
    private BigDecimal preref;

    //GR_Moneda de referencia

    @JoinColumn(name = "STMPDH_MONREF", referencedColumnName = "GRTCOF_CODCOF", nullable = false, insertable=false, updatable=false)
    @ManyToOne(fetch=FetchType.LAZY)
    private GR_Moneda monedaDeReferencia;

    //Fecha de precio de referencia
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_FECREF", nullable = false)
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecref;
   
    //SubTipo
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR01", length = 30)
    private String rubr01;
    //Marca
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR02", length = 30)
    private String rubr02;

//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR03", length = 30)
    private String rubr03;

//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR04", length = 30)
    private String rubr04;

//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR05", length = 30)
    private String rubr05;

//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR06", length = 30)
    private String rubr06;

//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR07", length = 30)
    private String rubr07;

//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR08", length = 30)
    private String rubr08;

//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR09", length = 30)
    private String rubr09;

//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_RUBR10", length = 30)
    private String rubr10;

    @Column(name = "STMPDH_DEFSER", length = 1)
    private String defineSerie;

    @Column(name = "STMPDH_FACCON", length = 6)
    private int faccon;

    @Column(name = "STMPDH_PREREP", precision = 20, scale = 6)
    private BigDecimal prerep;

    @Column(name = "STMPDH_MONREP", length = 6)
    private String monrep;
    

    @Column(name = "STMPDH_FECREP")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecrep;

    //Precio ultima compra
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_PREUCO", precision = 20, scale = 6)
    private BigDecimal preuco;

    //GR_Moneda ultima compra    
    @JoinColumn(name = "STMPDH_MONUCO", referencedColumnName = "GRTCOF_CODCOF", nullable = false, insertable=false, updatable=false)
    @ManyToOne(fetch=FetchType.LAZY)
    private GR_Moneda monedaUltimaCompra;

    //Fecha ultima compra
    @Column(name = "STMPDH_FECUCO")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecuco;

    //Precio de reposicion (Precio de produccion)
    @Column(name = "STMPDH_PREPRD", precision = 20, scale = 6)
    private BigDecimal preprd;

    //Modeda de reposicion (GR_Moneda de produccion)    
    @JoinColumn(name = "STMPDH_MONPRD", referencedColumnName = "GRTCOF_CODCOF", nullable = false, insertable=false, updatable=false)
    @ManyToOne(fetch=FetchType.LAZY)
    private GR_Moneda monedaDeProduccion;

    //Fecha de reposicion (Fecha de produccion)
    @Column(name = "STMPDH_FECPRD")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fecprd;
    
    //Indica si es considerado un bien de uso
    @Column(name = "STMPDH_BIEUSO")
    private Character bieuso;
 
    //Dias de entrega
    @Column(name = "STMPDH_DIAENT")
    private Short diaent;

    //Volumen del producto
    @Column(name = "STMPDH_VOLUME", precision = 18, scale = 2)
    private BigDecimal volume;

    //Codigo reducido
    @Column(name = "STMPDH_INDCOD", length = 30)
    private String indcod;
    

    @Column(name = "STMPDH_MODCPT", length = 2)
    private String modcpt;
    @Column(name = "STMPDH_TIPCPT")
    private Character tipcpt;
    @Column(name = "STMPDH_CODCPT", length = 6)
    private String codcpt;
    
    //Cuenta contable de venta
//    @Basic(fetch=FetchType.LAZY)
    @Column(name = "STMPDH_CUENVT", length = 40)
    private String cuenvt;

    //Ubicación en Almacen
    @Column(name = "STMPDH_UBICAC", length = 25)
    private String ubicacion;


    @Embedded
    private GR_Auditoria auditoria;


    public ST_Producto() {
        
    }

    public ST_Producto(ST_ProductoPK productoPK) {
        this.tippro = productoPK.getTippro();
        this.artcod = productoPK.getArtcod();
    }
    
    public ST_Producto(String tippro, String artcod) {
        this.tippro = tippro;
        this.artcod = artcod;
    }

    public String getArtcod() {
        return artcod;
    }

    public void setArtcod(String artcod) {
        this.artcod = artcod;
    }


    public Character getBieuso() {
        return bieuso;
    }

    public void setBieuso(Character bieuso) {
        this.bieuso = bieuso;
    }

    public String getDescrp() {
        return descrp;
    }

    public void setDescrp(String descrp) {
        this.descrp = descrp;
    }

    public Short getDiaent() {
        return diaent;
    }

    public void setDiaent(Short diaent) {
        this.diaent = diaent;
    }

    public Date getFecprd() {
        return fecprd;
    }

    public void setFecprd(Date fecprd) {
        this.fecprd = fecprd;
    }

    public Date getFecref() {
        return fecref;
    }

    public void setFecref(Date fecref) {
        this.fecref = fecref;
    }

    public Date getFecrep() {
        return fecrep;
    }

    public void setFecrep(Date fecrep) {
        this.fecrep = fecrep;
    }

    public Date getFecuco() {
        return fecuco;
    }

    public void setFecuco(Date fecuco) {
        this.fecuco = fecuco;
    }

    public String getIndcod() {
        return indcod;
    }

    public void setIndcod(String indcod) {
        this.indcod = indcod;
    }

    public GR_Moneda getMonedaDeReferencia() {
        return monedaDeReferencia;
    }

    public void setMonedaDeReferencia(GR_Moneda monedaDeReferencia) {
        this.monedaDeReferencia = monedaDeReferencia;
    }

    public GR_Moneda getMonedaDeProduccion() {
        return monedaDeProduccion;
    }

    public void setMonedaDeProduccion(GR_Moneda monedaDeProduccion) {
        this.monedaDeProduccion = monedaDeProduccion;
    }

    public String getMonrep() {
        return monrep;
    }

    public void setMonrep(String monrep) {
        this.monrep = monrep;
    }

    public GR_Moneda getMonedaUltimaCompra() {
        return monedaUltimaCompra;
    }

    public void setMonedaUltimaCompra(GR_Moneda monedaUltimaCompra) {
        this.monedaUltimaCompra = monedaUltimaCompra;
    }
    
    public Character getPesctr() {
        return pesctr;
    }

    public void setPesctr(Character pesctr) {
        this.pesctr = pesctr;
    }

    public BigDecimal getPesfac() {
        return pesfac;
    }

    public void setPesfac(BigDecimal pesfac) {
        this.pesfac = pesfac;
    }

    public BigDecimal getPesmax() {
        return pesmax;
    }

    public void setPesmax(BigDecimal pesmax) {
        this.pesmax = pesmax;
    }

    public BigDecimal getPesmin() {
        return pesmin;
    }

    public void setPesmin(BigDecimal pesmin) {
        this.pesmin = pesmin;
    }

    public BigDecimal getPreprd() {
        return preprd;
    }

    public void setPreprd(BigDecimal preprd) {
        this.preprd = preprd;
    }

    public BigDecimal getPreref() {
        return preref;
    }

    public void setPreref(BigDecimal preref) {
        this.preref = preref;
    }

    public BigDecimal getPrerep() {
        return prerep;
    }

    public void setPrerep(BigDecimal prerep) {
        this.prerep = prerep;
    }

    public BigDecimal getPreuco() {
        return preuco;
    }

    public void setPreuco(BigDecimal preuco) {
        this.preuco = preuco;
    }

    public BigDecimal getPtoped() {
        return ptoped;
    }

    public void setPtoped(BigDecimal ptoped) {
        this.ptoped = ptoped;
    }

    public String getRubr01() {
        return rubr01;
    }

    public void setRubr01(String rubr01) {
        this.rubr01 = rubr01;
    }

    public String getRubr02() {
        return rubr02;
    }

    public void setRubr02(String rubr02) {
        this.rubr02 = rubr02;
    }

    public String getRubr03() {
        return rubr03;
    }

    public void setRubr03(String rubr03) {
        this.rubr03 = rubr03;
    }

    public String getRubr04() {
        return rubr04;
    }

    public void setRubr04(String rubr04) {
        this.rubr04 = rubr04;
    }

    public String getRubr05() {
        return rubr05;
    }

    public void setRubr05(String rubr05) {
        this.rubr05 = rubr05;
    }

    public String getRubr06() {
        return rubr06;
    }

    public void setRubr06(String rubr06) {
        this.rubr06 = rubr06;
    }

    public String getRubr07() {
        return rubr07;
    }

    public void setRubr07(String rubr07) {
        this.rubr07 = rubr07;
    }

    public String getRubr08() {
        return rubr08;
    }

    public void setRubr08(String rubr08) {
        this.rubr08 = rubr08;
    }

    public String getRubr09() {
        return rubr09;
    }

    public void setRubr09(String rubr09) {
        this.rubr09 = rubr09;
    }

    public String getRubr10() {
        return rubr10;
    }

    public void setRubr10(String rubr10) {
        this.rubr10 = rubr10;
    }

    public BigDecimal getStkmax() {
        return stkmax;
    }

    public void setStkmax(BigDecimal stkmax) {
        this.stkmax = stkmax;
    }

    public BigDecimal getStkmin() {
        return stkmin;
    }

    public void setStkmin(BigDecimal stkmin) {
        this.stkmin = stkmin;
    }

    public String getTextos() {
        return textos;
    }

    public void setTextos(String textos) {
        this.textos = textos;
    }

    public ST_UnidadMedida getUnidadConversion() {
        return unidadConversion;
    }

    public void setUnidadConversion(ST_UnidadMedida unidadConversion) {
        this.unidadConversion = unidadConversion;
    }

    public ST_UnidadMedida getUnidadPeso() {
        return unidadPeso;
    }

    public void setUnidadPeso(ST_UnidadMedida unidadPeso) {
        this.unidadPeso = unidadPeso;
    }

    public BigDecimal getVolume() {
        return volume;
    }

    public void setVolume(BigDecimal volume) {
        this.volume = volume;
    }

    public ST_TipoProducto getTipoProducto() {
        return tipoProducto;
    }

    public void setTipoProducto(ST_TipoProducto tipoProducto) {
        this.tipoProducto = tipoProducto;
    }
  
    public String getCodcpt() {
        return codcpt;
    }

    public void setCodcpt(String codcpt) {
        this.codcpt = codcpt;
    }

    public String getModcpt() {
        return modcpt;
    }

    public void setModcpt(String modcpt) {
        this.modcpt = modcpt;
    }

    public Character getTipcpt() {
        return tipcpt;
    }

    public void setTipcpt(Character tipcpt) {
        this.tipcpt = tipcpt;
    }

    public String getCuenvt() {
        return cuenvt;
    }

    public void setCuenvt(String cuenvt) {
        this.cuenvt = cuenvt;
    }

    public ST_UnidadMedida getUnidadMedida() {
        return unidadMedida;
    }

    public void setUnidadMedida(ST_UnidadMedida unidadMedida) {
        this.unidadMedida = unidadMedida;
    }

    public int getFaccon() {
        return faccon;
    }

    public void setFaccon(int faccon) {
        this.faccon = faccon;
    }

    public String getTippro() {
        return tippro;
    }

    public void setTippro(String tippro) {
        this.tippro = tippro;
    }

    public String getCodigo() {
        return tippro.trim()+artcod.trim();
    }

    public String getUbicacion() {
        return ubicacion;
    }

    public void setUbicacion(String ubicacion) {
        this.ubicacion = ubicacion;
    }

    public String getDefineSerie() {
        return defineSerie;
    }

    public void setDefineSerie(String defineSerie) {
        this.defineSerie = defineSerie;
    }

    public BigDecimal getPrecioVenta() {
        return precioVenta;
    }

    public void setPrecioVenta(BigDecimal precioVenta) {
        this.precioVenta = precioVenta;
    }

    public GR_Auditoria getAuditoria() {
        return auditoria;
    }

    public void setAuditoria(GR_Auditoria auditoria) {
        this.auditoria = auditoria;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ST_Producto other = (ST_Producto) obj;
        if ((this.artcod == null) ? (other.artcod != null) : !this.artcod.equals(other.artcod)) {
            return false;
        }
        if ((this.tippro == null) ? (other.tippro != null) : !this.tippro.equals(other.tippro)) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 83 * hash + (this.artcod != null ? this.artcod.hashCode() : 0);
        hash = 83 * hash + (this.tippro != null ? this.tippro.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "ST_Producto{" + "artcod=" + artcod + "tippro=" + tippro + '}';
    }
    
}
